Private Sub MakeSphere(ByVal Cx As Single, ByVal Cy As Single, ByVal Cz As Single, ByVal radius As Single, ByVal num_horizontal As Integer, ByVal num_vertical As Integer)
Dim T As Integer
Dim theta1 As Single
Dim theta2 As Single
Dim dtheta As Single
Dim P As Integer
Dim phi1 As Single
Dim phi2 As Single
Dim dphi As Single
Dim x11 As Single ' xij: theta = i, phi = j
Dim y11 As Single
Dim z11 As Single
Dim x12 As Single
Dim y12 As Single
Dim z12 As Single
Dim x21 As Single
Dim y21 As Single
Dim z21 As Single
Dim x22 As Single
Dim y22 As Single
Dim z22 As Single
Dim R As Single
theta1 = 0
dtheta = 2 * PI / num_horizontal
For T = 1 To num_horizontal
theta2 = theta1 + dtheta
phi1 = -PI / 2
dphi = PI / num_vertical
x11 = 0
y11 = -radius
z11 = 0
x21 = 0
y21 = -radius
z21 = 0
For P = 1 To num_vertical
phi2 = phi1 + dphi
y12 = radius * Sin(phi2)
R = radius * Cos(phi2)
x12 = R * Cos(theta1)
z12 = R * Sin(theta1)
y22 = radius * Sin(phi2)
R = radius * Cos(phi2)
x22 = R * Cos(theta2)
z22 = R * Sin(theta2)
If P = 1 Then
' Bottom triangle.
TheSolid.AddFace _
Cx + x11, Cy + y11, Cz + z11, _
Cx + x12, Cy + y12, Cz + z12, _
Cx + x22, Cy + y22, Cz + z22
ElseIf P = num_vertical Then
' Top triangle.
TheSolid.AddFace _
Cx + x11, Cy + y11, Cz + z11, _
Cx + x12, Cy + y12, Cz + z12, _
Cx + x21, Cy + y21, Cz + z21
Else
' Middle rectangle.
TheSolid.AddFace _
Cx + x11, Cy + y11, Cz + z11, _
Cx + x12, Cy + y12, Cz + z12, _
Cx + x22, Cy + y22, Cz + z22, _
Cx + x21, Cy + y21, Cz + z21
End If
x11 = x12
y11 = y12
z11 = z12
x21 = x22
y21 = y22
z21 = z22
phi1 = phi2
Next P
theta1 = theta2
Next T
End Sub
' Draw the data.
Private Sub DrawData(ByVal pic As PictureBox)
Dim X As Single
Dim Y As Single
Dim Z As Single
Dim S(1 To 4, 1 To 4) As Single
Dim T(1 To 4, 1 To 4) As Single
Dim ST(1 To 4, 1 To 4) As Single
Dim PST(1 To 4, 1 To 4) As Single
' Prevent overflow errors when drawing lines
' too far out of bounds.
On Error Resume Next
' Cull backfaces.
TheSolid.Culled = False
If chkRemoveBackfaces.value = vbChecked Then
m3SphericalToCartesian EyeR, EyeTheta, EyePhi, X, Y, Z